package com.yty.demo._3_grammar;

import java.util.Arrays;

/**
 * @author: yangtaoyao
 * @time: 2020/1/7 8:57
 * @description: 数组练习
 */
public class ArrayTest {

    public static void main(String[] args) {
        /*一维数组*/
        //静态初始化
        int arr2[]=new int[]{1,2,3,4,4,2};
        int[] arr3={1,2,3,4,4,2};

        //动态初始化
        int[] arr1=new int[10];
        arr1[0]=1;
        //元素默认初始化为0
        System.out.println(arr1[2]);


        //动态初始化
        int[][] arr4=new int[1][4];
        int[][] arr5=new int[3][];
        //静态初始化
        int[][] arr6=new int[][]{{1,2},{2,3},{3,4,7}};

        //System.out.println(arr6[1][3]);//数组越界
        //遍历
        for (int i = 0; i < arr6.length; i++) {
            for (int j = 0; j < arr6[i].length; j++) {
                System.out.print(arr6[i][j]+" ");
            }
        }
        System.out.println();

        int[] arr={34,32,3,14,7,6,7,8,9};

        //最大
        System.out.println("最大:"+getMax(arr));

        //总数
        System.out.println("总数:"+getTotal(arr));

        //拷贝
        testCopy();

        //排序
        System.out.println("----排序------");
        selectSort(arr);
        System.out.println(Arrays.toString(arr));

        int [] arrsort={34,32,3,14,7,6,7,8,9};
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arrsort));
    }

    public static int getMax(int[] arr){
        int max=arr[0];
        for (int i = 0; i <arr.length ; i++) {
            if(max<arr[i]){
                max=arr[i];
            }
        }
        return max;
    }

    public static int getTotal(int[] arr){
        int res=0;
        for (int i = 0; i <arr.length ; i++) {
            res+=arr[i];
        }
        return res;
    }

    public static void testCopy(){
        int[] arr={1,2,3,4,5,6,7,8,9};

        //1
        int[] a1=arr.clone();

        //2
        int[] a2=new int[10];
        //（原数组， 原数组的开始位置， 目标数组， 目标数组的开始位置， 拷贝个数）
        System.arraycopy(arr, 0, a2, 0, 3);

        //3
        //Arrays.copyOf底层其实也是用的System.arraycopy
        //（原数组，拷贝的个数）
        int[] a3=Arrays.copyOf(arr,10);

        //4
        //Arrays.copyOfRange底层其实也是用的System.arraycopy，只不过封装了一个方法
        //（原数组，开始位置，拷贝的个数）
        int[] a4=Arrays.copyOfRange(arr,0,arr.length);

        System.out.println("------copy--------");
        System.out.println(Arrays.toString(a1));
        System.out.println(Arrays.toString(a2));
        System.out.println(Arrays.toString(a3));
        System.out.println(Arrays.toString(a4));
    }

    //选择排序
    public static void selectSort(int[] arr){
        int min=0;
        for (int i = 0; i < arr.length; i++) {
            min=i;
            for (int j = i; j<arr.length; j++) {
                if(arr[min]>arr[j]){
                    min=j;
                }
            }
            swap(arr,min,i);
        }
    }

    private static void swap(int[] arr, int min, int i) {
        int n=arr[min];
        arr[min]=arr[i];
        arr[i]=n;
    }
}
